package RRHH_MODELO;
import Conexion.Conexion;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Date;
import java.text.SimpleDateFormat;

public class RHH_CONVOCATORIA{
	private int ID;
	private int ID_CARGO;
	private Date FECHA_VENCIMIENTO_CONVOCATORIA;
	private String DESCRIPCION;
	private String OBSERVACIONES;
	private int ESTADO;
	private Conexion con = null;

	public RHH_CONVOCATORIA(Conexion con){
            this.con=con;
        }

	public RHH_CONVOCATORIA(String OBSERVACIONES,String DESCRIPCION,Date FECHA_VENCIMIENTO_CONVOCATORIA,int ID_CARGO, int ESTADO){
            this.OBSERVACIONES =OBSERVACIONES;
            this.DESCRIPCION =DESCRIPCION;
            this.FECHA_VENCIMIENTO_CONVOCATORIA =FECHA_VENCIMIENTO_CONVOCATORIA;
            this.ID_CARGO =ID_CARGO;
            this.ESTADO=ESTADO;
	}

        
        
	public boolean Insertar() throws SQLException{
            String consulta = "insert into BROKER.RHH_CONVOCATORIA(OBSERVACIONES,DESCRIPCION,FECHA_VENCIMIENTO_CONVOCATORIA,ID_CARGO,ID, ESTADO) VALUES ('"+OBSERVACIONES+"','"+DESCRIPCION+"', to_date('"+getFECHA_VENCIMIENTO_CONVOCATORIA()+"','DD/MM/YYYY'),"+ID_CARGO+","+ID+","+ESTADO+")";
            con.EjecutarSentencia(consulta);
            return true;
	}
        
	public boolean activar(int id, String fecha) throws SQLException{
            String consulta = "update BROKER.RHH_CONVOCATORIA set ESTADO=0, FECHA_VENCIMIENTO_CONVOCATORIA = to_date('"+fecha+"','DD/MM/YYYY') where ID="+id;
            con.EjecutarSentencia(consulta);
            return true;
	}
        
        public List<RHH_CONVOCATORIA> BuscarEnPostulado(double id_post) throws SQLException{
            String consulta = "select c.* from BROKER.RHH_POSTULADO_CONVOCATORIA pc, BROKER.RHH_CONVOCATORIA c where pc.ID_CONVOCATORIA = c.ID and pc.ID_POSTULADO ="+id_post;
            ResultSet rs = con.EjecutarConsulta(consulta);            
            return Cargar(rs);
        }
        public List<RHH_CONVOCATORIA> BuscarSinPostulado(double id_post) throws SQLException{
            String consulta = "select * from BROKER.RHH_CONVOCATORIA conv where conv.ID not in (select c.ID from BROKER.RHH_POSTULADO_CONVOCATORIA pc, BROKER.RHH_CONVOCATORIA c where pc.ID_CONVOCATORIA = c.ID and pc.ID_POSTULADO ="+id_post+")";
            ResultSet rs = con.EjecutarConsulta(consulta);            
            return Cargar(rs);
        }
	public boolean desactivar(int id) throws SQLException{
            String consulta = "update BROKER.RHH_CONVOCATORIA set ESTADO=1  where ID="+id;
            con.EjecutarSentencia(consulta);
            consulta = "delete from BROKER.RHH_POSTULADO_CONVOCATORIA  where ID_CONVOCATORIA="+id;
            con.EjecutarSentencia(consulta);
            return true;
	}

	public boolean EliminarXid() throws SQLException{
            String consulta = "delete from BROKER.RHH_CONVOCATORIA where ID = "+getID();
            con.EjecutarSentencia(consulta);
            return true;
	}

	public RHH_CONVOCATORIA BuscarXid(int id) throws SQLException{
            String consulta = "select * from BROKER.RHH_CONVOCATORIA where ID = "+id;
            ResultSet rs = con.EjecutarConsulta(consulta);            
            List<RHH_CONVOCATORIA> lista = Cargar(rs);	
            if(lista.size()>0)
                return lista.get(0);
            else
                return null;
	}        	
	public List<RHH_CONVOCATORIA> BuscarXPostulado(int id_postulado) throws SQLException{
            String consulta = "select c.* from BROKER.RHH_POSTULADO_CONVOCATORIA pc, BROKER.RHH_CONVOCATORIA c where c.ID = pc.ID_CONVOCATORIA and pc.ID_POSTULADO ="+id_postulado;
            ResultSet rs = con.EjecutarConsulta(consulta);            
            return Cargar(rs);	
	}        	

	public List<RHH_CONVOCATORIA> Todos() throws SQLException{
            DesactivarVencidas();
            String consulta = "select * from BROKER.RHH_CONVOCATORIA";
            ResultSet rs = con.EjecutarConsulta(consulta);
            return Cargar(rs);	
	}
        
	public List<RHH_CONVOCATORIA> TodosActivas() throws SQLException{
            DesactivarVencidas();
            String consulta = "select * from BROKER.RHH_CONVOCATORIA where ESTADO=0";
            ResultSet rs = con.EjecutarConsulta(consulta);
            return Cargar(rs);	
	}
        
	public void DesactivarVencidas() throws SQLException{
            String consulta = "update BROKER.RHH_CONVOCATORIA set ESTADO = 1 where to_date(FECHA_VENCIMIENTO_CONVOCATORIA, 'dd/MM/yyyy') < to_date(SYSDATE, 'dd/MM/yyyy')";
            con.EjecutarSentencia(consulta);
	}

	public List<RHH_CONVOCATORIA> Cargar(ResultSet rs) throws SQLException{
            List<RHH_CONVOCATORIA> lista = new ArrayList<RHH_CONVOCATORIA>();
            while(rs.next())
            {
                    RHH_CONVOCATORIA objeto = new RHH_CONVOCATORIA(con);

                    objeto.setID(rs.getInt("ID"));
                    objeto.setID_CARGO(rs.getInt("ID_CARGO"));
                    objeto.setFECHA_VENCIMIENTO_CONVOCATORIA(rs.getDate("FECHA_VENCIMIENTO_CONVOCATORIA"));
                    objeto.setDESCRIPCION(rs.getString("DESCRIPCION"));
                    objeto.setOBSERVACIONES(rs.getString("OBSERVACIONES"));
                    objeto.setESTADO(rs.getInt("ESTADO"));
                    lista.add(objeto);
            }
            return lista;
	}

	public int getID(){
		return ID;
	}
	public void setID(int ID){
		this.ID=ID;
	}

	public int getID_CARGO(){
		return ID_CARGO;
	}
	public void setID_CARGO(int ID_CARGO){
		this.ID_CARGO=ID_CARGO;
	}

	public String getFECHA_VENCIMIENTO_CONVOCATORIA(){
	SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
		return sdf.format(FECHA_VENCIMIENTO_CONVOCATORIA);
	}
	public void setFECHA_VENCIMIENTO_CONVOCATORIA(Date FECHA_VENCIMIENTO_CONVOCATORIA){
		this.FECHA_VENCIMIENTO_CONVOCATORIA=FECHA_VENCIMIENTO_CONVOCATORIA;
	}

	public String getDESCRIPCION(){
		return DESCRIPCION;
	}
	public void setDESCRIPCION(String DESCRIPCION){
		this.DESCRIPCION=DESCRIPCION;
	}

	public String getOBSERVACIONES(){
		return OBSERVACIONES;
	}
	public void setOBSERVACIONES(String OBSERVACIONES){
		this.OBSERVACIONES=OBSERVACIONES;
	}

    public int getESTADO() {
        return ESTADO;
    }

    public void setESTADO(int ESTADO) {
        this.ESTADO = ESTADO;
    }

	public Conexion getCon() {
		return con;
	}
	public void setCon(Conexion con) {
		this.con = con;
	}

}
